package com.silence.gmall.product.domain.repository.impl;

import com.baomidou.mybatisplus.extension.repository.CrudRepository;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.silence.gmall.product.domain.entity.SpuSaleAttr;
import com.silence.gmall.product.domain.entity.SpuSaleAttrValue;
import com.silence.gmall.product.domain.mapper.SpuSaleAttrMapper;
import com.silence.gmall.product.domain.repository.SpuSaleAttrRepository;
import com.silence.gmall.product.dto.SpuSaleAttrDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Author silence
 * @Description 针对表【spu_sale_attr(spu销售属性)】的数据库操作Repository实现
 * @Date 2025-08-17 16:28:16
 */
@Slf4j
@Repository
@RequiredArgsConstructor
public class SpuSaleAttrRepositoryImpl extends CrudRepository<SpuSaleAttrMapper, SpuSaleAttr>
        implements SpuSaleAttrRepository {

    /**
     * 根据spuId获取销售属性
     *
     * @param spuId spuId
     * @return 销售属性
     */
    @Override
    public List<SpuSaleAttrDto> spuSaleAttrList(Long spuId) {
        MPJLambdaWrapper<SpuSaleAttr> wrapper = new MPJLambdaWrapper<SpuSaleAttr>()
                .selectAll(SpuSaleAttr.class)
                .selectCollection(SpuSaleAttrValue.class, SpuSaleAttrDto::getSpuSaleAttrValueList)
                .leftJoin(SpuSaleAttrValue.class, on -> on
                        .eq(SpuSaleAttrValue::getSpuId, SpuSaleAttr::getSpuId)
                        .eq(SpuSaleAttrValue::getBaseSaleAttrId, SpuSaleAttr::getBaseSaleAttrId))
                .eq(SpuSaleAttr::getSpuId, spuId);
        return baseMapper.selectJoinList(SpuSaleAttrDto.class, wrapper);
    }

    /**
     * 根据spuId skuId获取销售属性
     *
     * @param spuId spuId
     * @param skuId spuId
     * @return 销售属性
     */
    @Override
    public List<SpuSaleAttrDto> spuSaleAttrList(Long spuId, Long skuId) {
        return baseMapper.spuSaleAttrList(spuId, skuId);
    }
}